package hotLeetcode;

import com.wdc.binarytree.LeetCode226;

import java.util.*;

public class H02Leetcode2 {
    //    public List<List<test>> groupAnagrams(test[] strs) {
//
//        test[] strings = new test[strs.length];
//
//        for (int i = 0; i < strs.length; i++) {
//            byte[] bytes = strs[i].getBytes();
//            Arrays.sort(bytes);
//            strings[i] = new test(bytes);
//        }
//        List<List<test>> result = new ArrayList<>();
//        int length = strs.length;
//        for (int i = 0; i < length; i++) {
//            ArrayList<test> arrayList = new ArrayList<>();
//            if (null != strings[i]) {
//                arrayList.add(strs[i]);
//                for (int j = i + 1; j < length; j++) {
//                    if (is(strs[i],strs[j])) {
//                        arrayList.add(strs[j]);
//                        strings[j] = null;
//                    }
//
//                }
//            }
//
//            if (arrayList.size() != 0) {
//                result.add(arrayList);
//            }
//
//
//        }
//
//
//        return result;
//
//    }
//
//    private boolean is(test str1, test str2) {
//        HashSet<test> set1 = new HashSet<>(Arrays.asList(str1.split("")));
//        HashSet<test> set2 = new HashSet<>(Arrays.asList(str2.split("")));
//        return set1.equals(set2);
//    }
//    public List<List<test>> groupAnagrams(test[] strs) {
//        int length = strs.length;
//        test[] strings = new test[length];
//        List<List<test>> result = new ArrayList<>();
//
//        for (int i = 0; i < length; i++) {
//            byte[] bytes = strs[i].getBytes();
//            Arrays.sort(bytes);
//            strings[i] = new test(bytes);
//        }
//
//        for (int i = 0; i < length; i++) {
//            ArrayList<test> list = new ArrayList<>();
//            if (strings[i] != null) {
//                list.add(strs[i]);
//                for (int j = i + 1; j < length; j++) {
//                    if (strings[i].equals(strings[j])) {
//                        list.add(strs[j]);
//                        strings[j] = null;
//                    }
//                }
//            }
//
//            if (list.size() != 0) {
//                result.add(list);
//            }
//
//        }
//
//
//        return result;
//    }

    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String key = new String(charArray);
            List<String> list = map.get(key);
            if (null == list) {
                list = new ArrayList<>();
                map.put(key, list);
            }
            list.add(str);
        }
        return new ArrayList<>(map.values());

    }


    public static void main(String[] args) {
        String[] str = {"eat", "tea", "tan", "ate", "nat", "bat"};

        H02Leetcode2 h02Leetcode2 = new H02Leetcode2();
        System.out.println(h02Leetcode2.groupAnagrams(str));
    }

}
